1. Field of the Invention
The present invention relates to data storage subsystems. More particularly, the present invention relates to RAID-protected storage subsystems.
2. Description of the Related Art
Performance of a data storage subsystem is adversely affected by the need to protect data stored in an unreliable storage medium. When a data storage subsystem is formed by an array of storage units, such as Hard Disk Drives (HDDs), a well-known RAID technique is typically used to provide protection.
RAID-configured subsystems are conventionally implemented using block-level controllers that provide RAID-type protection by generating parity information that is based on fixed-sized blocks of data that are received from a host system. A conventional filing system within the host system maps application files into the fixed-sized blocks. From the point of view of the conventional filing system, a RAID controller is effectively invisible and the filing system merely “sees” a storage subsystem that provides reliable block storage. All conventional RAID system configurations, however, suffer from significant system operation inefficiencies when data is written to a RAID-configured storage array. That is, depending on the RAID level of the storage subsystem, a single write operation can turn into two, four, six or more read and write operations on the storage units of the subsystem.
Additionally, while conventional filing systems can have different volumes/file systems that are protected by different RAID levels, such a conventional system configuration is inflexible because in the situation when there is insufficient space on a one of the RAID-configured storage units, another entire storage unit or virtual storage unit must be added to the system so that there is sufficient space that can be associated with the filled RAID-configured storage unit in order to provide the RAID-level protection. Moreover, the inflexibility exists even when other RAID-configured storage units that are already part of the system are only partial filled. Further still, all storage units within a conventional RAID array must be of the same or close to the same effective size. A complete new set of storage units representing the width of the RAID array is required to be added to the array to expand the size of the array.
There is also a known filing system that provides different RAID levels of protection for different files. The known system includes a logical layer between the filing system and the storage devices that implements “Object-Based Disks” (OBD). The known filing system determines which data should be protected by which RAID levels and generates parity information accordingly. The data and parity information is then passed to the OBD layer, which runs an internal filing system that stores the data in logical objects. Thus, the known filing system is essentially a two-level filing system in which the top level filing system handles RAID processing and the lower level filing system the allocation to physical blocks. This provides the flexibility of RAID level by file, but at the expense of the inefficiency of a multi-level system.
Consequently, what is needed is a filing system that reduces the inefficiencies associated with a conventional RAID-configured storage subsystem, or the inefficiencies of a multi-level filing system and yet maintains overall system reliability. Additionally, what is needed is a filing system that selects a required level of performance and reliability for a file on a file-by-file basis.